import { log } from 'console';
import * as vscode from 'vscode';
import * as fs from 'fs';
import * as path from 'path';

/**
 * 根据输入的名称初始化一个功能
 * @returns 
 */
export async function initPage(selectedDir: string) {
    const fs = require('fs');
    const path = require('path');

    // 获取当前选中的目录
    log('selectedDir:', selectedDir);

    if (!selectedDir) {
        vscode.window.showErrorMessage('请在ta404模块的modulePart目录右键操作.');
        return;
    }



    // 创建模块目录
    const moduleName = await vscode.window.showInputBox({ prompt: '输入要创建的功能名称:' });
    if (!moduleName) return; // 用户取消输入


    // 目录结构
    const moduleStructure = {
        [`${moduleName}.vue`]: getModuleVueContent(moduleName),
        'routes.js': getModuleRoutesContent(moduleName),
        'part': {},
    };

    const modulePath = path.join(selectedDir, moduleName);
    if (!fs.existsSync(modulePath)) {
        fs.mkdirSync(modulePath);

        // 递归创建目录和文件
        for (const [name, content] of Object.entries(moduleStructure)) {
            const fullPath = path.join(modulePath, name);
            if (typeof content === 'object') { // 是目录
                fs.mkdirSync(fullPath);
            } else { // 是文件
                fs.writeFileSync(fullPath, content);
            }
        }

        vscode.window.showInformationMessage(`功能 "${moduleName}" 创建成功.`);
        // 在创建完模块后调用此函数
        await updateParentRoutes(selectedDir.replace('modulePart','router'), moduleName);
    } else {
        vscode.window.showWarningMessage(`文件夹 "${moduleName}" 早已存在.`);
    }
}

function getModuleRoutesContent(moduleName: string) {

    return `
// 导出该模块路由
export default [
    {
    title: 'title',
    name: '${moduleName}',
    path: '${moduleName}',
    component: () => import('./${moduleName}.vue')
    }
]
    `;
}

function getModuleVueContent(moduleName: string) {

    return `
<template>
  <div class="container">

  </div>
</template>
  
<script>

export default {
  name: 'mainPage',

  data() {
      return {
      }
  },
  mounted() {
  
  },
  methods: {
  
  },
}
</script>
  
<style scoped lang="less"></style>
    `;
}

/**
 * 更新路由
 * @param selectedDir 
 * @param moduleName 
 */
async function updateParentRoutes(selectedDir: string, moduleName: string) {
    console.log('selectedDir:',selectedDir);
    const routesPath = path.join(selectedDir, 'routes.js');
    
    try {
        let routesContent = await fs.promises.readFile(routesPath, 'utf8');
        
        // 假设moduleName是"myModule"，生成相应的导入语句
        const newImportLine = `import ${moduleName}Routes from '../modulePart/${moduleName}/routes'\n`;
        const importInsertionIndex = routesContent.search(/\/\/ 模块part 声明导入/);

        if (importInsertionIndex !== -1) {
            routesContent = [
                routesContent.slice(0, importInsertionIndex),
                newImportLine,
                routesContent.slice(importInsertionIndex)
            ].join('');
            
            // 更新innerRoutes数组
            // 假设xxxx是你希望追加的新路由配置对象，例如：
            const newRoute = `...${moduleName}Routes`;
            // 使用正则表达式匹配到innerRoutes数组的末尾，准备追加内容
            // 注意：这里的正则表达式需要精确匹配您的代码结构
            const regex = /(\[.*?\])/s; // 此正则尝试匹配从 "[" 开始到末尾的 "];" 为止的内容，但可能需要根据实际情况调整
            const match = routesContent.match(regex);
            if (!match) {
                console.error('未找到innerRoutes数组');
                return;
            }
            
            // 构建追加新内容后的innerRoutes字符串
            const newArrayContent = `${match[1]}\ninnerRoutes.push(${newRoute})`; // 注意这里加入了换行和注释以便阅读

            // 替换原内容
            routesContent = routesContent.replace(regex, newArrayContent);
            
            await fs.promises.writeFile(routesPath, routesContent, 'utf8');
            console.log('routes.js 已成功更新');
            vscode.window.showInformationMessage('routes.js 已成功更新');

        } else {
            console.error('未找到模块导入注释标记，无法自动更新routes.js，请手动更新');
            vscode.window.showInformationMessage('未找到模块导入注释标记，无法自动更新routes.js，请手动更新');

        }
    } catch (err) {
        console.error('更新routes.js时发生错误（需手动更新）:', err);
        vscode.window.showInformationMessage('更新routes.js时发生错误（需手动更新）');

    }
}

